System.register([], function (_export) {
// A State has a character specification and (`charSpec`) and a list of possible
// subsequent states (`nextStates`).
//
// If a State is an accepting state, it will also have several additional
// properties:
//
// * `regex`: A regular expression that is used to extract parameters from paths
// that reached this accepting state.
// * `handlers`: Information on how to convert the list of captures into calls
// to registered handlers with the specified parameters.
// * `types`: How many static, dynamic, or star segments in this route. Used to
// decide which route to use if multiple registered routes match a path.
//
// Currently, State is implemented naively by looping over `nextStates` and
// comparing a character specification against a character. A more efficient
// implementation would use a hash of keys pointing at one or more next states.
'use strict';
var State;
function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
return {
setters: [],
execute: function () {
State = (function () {
function State(charSpec) {
_classCallCheck(this, State);
this.charSpec = charSpec;
this.nextStates = [];
}
State.prototype.get = function get(charSpec) {
for (var _iterator = this.nextStates, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
var _ref;
Eif (_isArray) {
if (_i >= _iterator.length) break;
_ref = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
_ref = _i.value;
}
var child = _ref;
var isEqual = child.charSpec.validChars === charSpec.validChars && child.charSpec.invalidChars === charSpec.invalidChars;
if (isEqual) {
return child;
}
}
};
State.prototype.put = function put(charSpec) {
var state = this.get(charSpec);
// If the character specification already exists in a child of the current
// state, just return that state.
if (state) {
return state;
}
// Make a new state for the character spec
state = new State(charSpec);
// Insert the new state as a child of the current state
this.nextStates.push(state);
// If this character specification repeats, insert the new state as a child
// of itself. Note that this will not trigger an infinite loop because each
// transition during recognition consumes a character.
if (charSpec.repeat) {
state.nextStates.push(state);
}
// Return the new state
return state;
};
// Find a list of child states matching the next character
State.prototype.match = function match(ch) {
var nextStates = this.nextStates,
results = [],
child,
charSpec,
chars;
for (var i = 0, l = nextStates.length; i < l; i++) {
child = nextStates[i];
charSpec = child.charSpec;
if (typeof (chars = charSpec.validChars) !== 'undefined') {
if (chars.indexOf(ch) !== -1) {
results.push(child);
}
} else Eif (typeof (chars = charSpec.invalidChars) !== 'undefined') {
if (chars.indexOf(ch) === -1) {
results.push(child);
}
}
}
return results;
};
return State;
})();
_export('State', State);
;
}
};
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL3JvdXRlLXJlY29nbml6ZXIvc3JjL3N0YXRlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BaUJhLEtBQUs7Ozs7Ozs7QUFBTCxXQUFLO0FBQ0wsaUJBREEsS0FBSyxDQUNKLFFBQVEsRUFBRTtnQ0FEWCxLQUFLOztBQUVkLGNBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ3pCLGNBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1NBQ3RCOztBQUpVLGFBQUssV0FNaEIsR0FBRyxHQUFBLGFBQUMsUUFBUSxFQUFFO0FBQ1osK0JBQWtCLElBQUksQ0FBQyxVQUFVLGtIQUFFOzs7Ozs7Ozs7Ozs7Z0JBQTFCLEtBQUs7O0FBQ1osZ0JBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxVQUFVLElBQ2pELEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FBQyxZQUFZLENBQUM7O0FBRXBFLGdCQUFJLE9BQU8sRUFBRTtBQUNYLHFCQUFPLEtBQUssQ0FBQzthQUNkO1dBQ0Y7U0FDRjs7QUFmVSxhQUFLLFdBaUJoQixHQUFHLEdBQUEsYUFBQyxRQUFRLEVBQUU7QUFDWixjQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7O0FBSS9CLGNBQUksS0FBSyxFQUFFO0FBQ1QsbUJBQU8sS0FBSyxDQUFDO1dBQ2Q7OztBQUdELGVBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQzs7O0FBRzVCLGNBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOzs7OztBQUs1QixjQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7QUFDbkIsaUJBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1dBQzlCOzs7QUFHRCxpQkFBTyxLQUFLLENBQUM7U0FDZDs7OztBQXpDVSxhQUFLLFdBNENoQixLQUFLLEdBQUEsZUFBQyxFQUFFLEVBQUU7QUFDUixjQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVTtjQUFFLE9BQU8sR0FBRyxFQUFFO2NBQzFDLEtBQUs7Y0FBRSxRQUFRO2NBQUUsS0FBSyxDQUFDOztBQUUzQixlQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pELGlCQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUV0QixvQkFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7O0FBRTFCLGdCQUFJLFFBQVEsS0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUEsQUFBQyxLQUFLLFdBQVcsRUFBRTtBQUN4RCxrQkFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzVCLHVCQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2VBQ3JCO2FBQ0YsTUFBTSxJQUFJLFFBQVEsS0FBSyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUEsQUFBQyxLQUFLLFdBQVcsRUFBRTtBQUNqRSxrQkFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzVCLHVCQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2VBQ3JCO2FBQ0Y7V0FDRjs7QUFFRCxpQkFBTyxPQUFPLENBQUM7U0FDaEI7O2VBakVVLEtBQUs7Ozt1QkFBTCxLQUFLOztBQWtFakIsT0FBQyIsImZpbGUiOiIvVXNlcnMvRWlzZW5iZXJnRWZmZWN0L0RvY3VtZW50cy9HaXRIdWIvVGhlIER1cmFuZGFsIFByb2plY3QvYXVyZWxpYS9yb3V0ZS1yZWNvZ25pemVyL3NyYy9zdGF0ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEEgU3RhdGUgaGFzIGEgY2hhcmFjdGVyIHNwZWNpZmljYXRpb24gYW5kIChgY2hhclNwZWNgKSBhbmQgYSBsaXN0IG9mIHBvc3NpYmxlXG4vLyBzdWJzZXF1ZW50IHN0YXRlcyAoYG5leHRTdGF0ZXNgKS5cbi8vXG4vLyBJZiBhIFN0YXRlIGlzIGFuIGFjY2VwdGluZyBzdGF0ZSwgaXQgd2lsbCBhbHNvIGhhdmUgc2V2ZXJhbCBhZGRpdGlvbmFsXG4vLyBwcm9wZXJ0aWVzOlxuLy9cbi8vICogYHJlZ2V4YDogQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBpcyB1c2VkIHRvIGV4dHJhY3QgcGFyYW1ldGVycyBmcm9tIHBhdGhzXG4vLyAgIHRoYXQgcmVhY2hlZCB0aGlzIGFjY2VwdGluZyBzdGF0ZS5cbi8vICogYGhhbmRsZXJzYDogSW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnZlcnQgdGhlIGxpc3Qgb2YgY2FwdHVyZXMgaW50byBjYWxsc1xuLy8gICB0byByZWdpc3RlcmVkIGhhbmRsZXJzIHdpdGggdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLlxuLy8gKiBgdHlwZXNgOiBIb3cgbWFueSBzdGF0aWMsIGR5bmFtaWMsIG9yIHN0YXIgc2VnbWVudHMgaW4gdGhpcyByb3V0ZS4gVXNlZCB0b1xuLy8gICBkZWNpZGUgd2hpY2ggcm91dGUgdG8gdXNlIGlmIG11bHRpcGxlIHJlZ2lzdGVyZWQgcm91dGVzIG1hdGNoIGEgcGF0aC5cbi8vXG4vLyBDdXJyZW50bHksIFN0YXRlIGlzIGltcGxlbWVudGVkIG5haXZlbHkgYnkgbG9vcGluZyBvdmVyIGBuZXh0U3RhdGVzYCBhbmRcbi8vIGNvbXBhcmluZyBhIGNoYXJhY3RlciBzcGVjaWZpY2F0aW9uIGFnYWluc3QgYSBjaGFyYWN0ZXIuIEEgbW9yZSBlZmZpY2llbnRcbi8vIGltcGxlbWVudGF0aW9uIHdvdWxkIHVzZSBhIGhhc2ggb2Yga2V5cyBwb2ludGluZyBhdCBvbmUgb3IgbW9yZSBuZXh0IHN0YXRlcy5cblxuZXhwb3J0IGNsYXNzIFN0YXRlIHtcbiAgY29uc3RydWN0b3IoY2hhclNwZWMpIHtcbiAgICB0aGlzLmNoYXJTcGVjID0gY2hhclNwZWM7XG4gICAgdGhpcy5uZXh0U3RhdGVzID0gW107XG4gIH1cblxuICBnZXQoY2hhclNwZWMpIHtcbiAgICBmb3IgKGxldCBjaGlsZCBvZiB0aGlzLm5leHRTdGF0ZXMpIHtcbiAgICAgIHZhciBpc0VxdWFsID0gY2hpbGQuY2hhclNwZWMudmFsaWRDaGFycyA9PT0gY2hhclNwZWMudmFsaWRDaGFycyAmJlxuICAgICAgICAgICAgICAgICAgICBjaGlsZC5jaGFyU3BlYy5pbnZhbGlkQ2hhcnMgPT09IGNoYXJTcGVjLmludmFsaWRDaGFycztcblxuICAgICAgaWYgKGlzRXF1YWwpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1dChjaGFyU3BlYykge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuZ2V0KGNoYXJTcGVjKTtcblxuICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgc3BlY2lmaWNhdGlvbiBhbHJlYWR5IGV4aXN0cyBpbiBhIGNoaWxkIG9mIHRoZSBjdXJyZW50XG4gICAgLy8gc3RhdGUsIGp1c3QgcmV0dXJuIHRoYXQgc3RhdGUuXG4gICAgaWYgKHN0YXRlKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgLy8gTWFrZSBhIG5ldyBzdGF0ZSBmb3IgdGhlIGNoYXJhY3RlciBzcGVjXG4gICAgc3RhdGUgPSBuZXcgU3RhdGUoY2hhclNwZWMpO1xuXG4gICAgLy8gSW5zZXJ0IHRoZSBuZXcgc3RhdGUgYXMgYSBjaGlsZCBvZiB0aGUgY3VycmVudCBzdGF0ZVxuICAgIHRoaXMubmV4dFN0YXRlcy5wdXNoKHN0YXRlKTtcblxuICAgIC8vIElmIHRoaXMgY2hhcmFjdGVyIHNwZWNpZmljYXRpb24gcmVwZWF0cywgaW5zZXJ0IHRoZSBuZXcgc3RhdGUgYXMgYSBjaGlsZFxuICAgIC8vIG9mIGl0c2VsZi4gTm90ZSB0aGF0IHRoaXMgd2lsbCBub3QgdHJpZ2dlciBhbiBpbmZpbml0ZSBsb29wIGJlY2F1c2UgZWFjaFxuICAgIC8vIHRyYW5zaXRpb24gZHVyaW5nIHJlY29nbml0aW9uIGNvbnN1bWVzIGEgY2hhcmFjdGVyLlxuICAgIGlmIChjaGFyU3BlYy5yZXBlYXQpIHtcbiAgICAgIHN0YXRlLm5leHRTdGF0ZXMucHVzaChzdGF0ZSk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoZSBuZXcgc3RhdGVcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBGaW5kIGEgbGlzdCBvZiBjaGlsZCBzdGF0ZXMgbWF0Y2hpbmcgdGhlIG5leHQgY2hhcmFjdGVyXG4gIG1hdGNoKGNoKSB7XG4gICAgdmFyIG5leHRTdGF0ZXMgPSB0aGlzLm5leHRTdGF0ZXMsIHJlc3VsdHMgPSBbXSxcbiAgICAgICAgY2hpbGQsIGNoYXJTcGVjLCBjaGFycztcblxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbmV4dFN0YXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNoaWxkID0gbmV4dFN0YXRlc1tpXTtcblxuICAgICAgY2hhclNwZWMgPSBjaGlsZC5jaGFyU3BlYztcblxuICAgICAgaWYgKHR5cGVvZiAoY2hhcnMgPSBjaGFyU3BlYy52YWxpZENoYXJzKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKGNoYXJzLmluZGV4T2YoY2gpICE9PSAtMSkge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIChjaGFycyA9IGNoYXJTcGVjLmludmFsaWRDaGFycykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChjaGFycy5pbmRleE9mKGNoKSA9PT0gLTEpIHtcbiAgICAgICAgICByZXN1bHRzLnB1c2goY2hpbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbn07XG4iXX0= |